package LeetCode._01算法入门.day13位运算;

import org.junit.Test;

/**
 * @author 挚爱之夕
 * @date 2022-03-04 - 03 - 04 - 8:37
 * @Description 给你一个整数 n，请你判断该整数是否是 2 的幂次方。如果是，返回 true ；否则，返回 false 。
 * 如果存在一个整数 x 使得n == 2 的x次方 ，则认为 n 是 2 的幂次方。
 * 输入必须是长度为 32 的 二进制串
 * @Version 简单
 */
public class _231二的幂 {
    @Test
    public void solve(){
        int i = -2147483648;
        System.out.println(isPowerOfTwo(i));
    }
    //by me 利用按位与，消除低位的1
    public boolean isPowerOfTwo(int n) {
        //应该是正数
        if(n <= 0)
            return false;
        //消除最低位的1
        int res = n & (n - 1);
        return res == 0;
    }
    //官方思路：取巧（长度为 32）
    static final int BIG = 1 << 30;//最大2的幂

    public boolean isPowerOfTwo1(int n) {
        return n > 0 && BIG % n == 0;
    }
}
